/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package myftp.app.model;

import java.util.Collection;
import java.util.Collections;
import java.util.List;
import javax.swing.event.TableModelEvent;
import javax.swing.table.DefaultTableModel;
import myftp.core.explorer.FileComparator;

/**
 *
 * @author CAVARLE Glenn, LUCAS Stéphane
 * Model pour le tableau des fichiers
 */
public class ExplorerTableModel extends DefaultTableModel {

    public String[] columnNames = {"Fichier", "Taille", "Date"};
    public Collection files = null;
    private FileComparator comparator = null;

    public ExplorerTableModel(Collection tableOfFile) {
        super();
        this.files = tableOfFile;
    }

    @Override
    public boolean isCellEditable(int iRowIndex, int iColumnIndex) {
        return false;
    }

    @Override
    public Object getValueAt(int rowIndex, int columnIndex) {
        FileModel aFile = (FileModel) files.toArray()[rowIndex];
        switch (columnIndex) {
            case 0:
                /* Colonne des noms des fichiers */
                return aFile.getName();
            case 1:
                /* Colonne des tailles des fichiers  */
                return aFile.getSize();
            case 2:
                /* Colonne des dates des fichiers */
                return aFile.getDate();
        }
        return "";
    }

    @Override
    public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
        FileModel aFile = (FileModel) files.toArray()[rowIndex];
        switch (columnIndex) {
            case 0:
                /* Colonne des noms des fichiers */
                aFile.setName(aValue.toString());
                break;
            case 1:
                /* Colonne des tailles des fichiers  */
                aFile.setSize(aValue.toString());
                break;
            case 2:
                /* Colonne des dates des fichiers */
                aFile.setDate(aValue.toString());
        }
    }

    /**
     * Methode pour trier la colonne 'column'
     * @param column
     */
    public void sort(int column) {
        /* Fonction de tri des lignes du tableau */
        if (comparator != null) {
            /* Récupération de la colonne à trier */
            comparator.setColumn(column);
            /* Triage de ses éléments */
            Collections.sort((List) files, comparator);
            /* Informations de changements de contenu */
            fireTableChanged(new TableModelEvent(this));
        }
    }

    @Override
    public Class getColumnClass(int columnIndex) {
        return String.class;
    }

    public void setComparator(FileComparator comparator) {
        this.comparator = comparator;
    }

    public FileComparator getComparator() {
        return comparator;
    }

    @Override
    public int getColumnCount() {
        return columnNames.length;
    }

    @Override
    public String getColumnName(int columnIndex) {
        return columnNames[columnIndex];
    }

    @Override
    public int getRowCount() {
        if (files == null) {
            return 0;
        } else {
            return files.size();
        }
    }
}

